Hadoop ディストリビューション対応 PySpark の初期化
Chorus Data セクションで Hadoop クラスター (EMR/CDH) を構成している場合は、PySpark を使用して HDFS データの読み取りと書き込みを行うことができます。このノートブックは、ワークフローのダウンストリーム オペレーターが使用できる Python 実行オペレーターとして公開できます。
この方法は、中規模または大規模なデータセットに対しては他の方法よりもはるかに効率的であり、数 GB を超えるサイズのデータセットを読み取る場合に唯一実行可能なオプションです。
PySpark は、Jupyter Notebooks for Team Studio で初期化して使用できます。
[クラスター用に Pyspark を初期化] 関数を使用してTIBCO Data Science - Team Studio のバージョン6.5.0 より前にノートブックを作成した場合にのみ適用されます。これは、システムで Spark のアップグレードに対応するために必要です。をクリックして、PySpark コンテキストを再生成します。
- 以前に生成したコードを次のように変更します。
os.environ['PYSPARK_SUBMIT_ARGS']= "--masteryarn-client --num-executors 1 --executor-memory 1g --packages com.databricks:spark-csv_2.10:1.5.0,com.databricks:spark-avro_2.11:3.0.1 pyspark-shell"
Hadoop クラスターにアクセスできない場合は、PySpark ジョブをローカル モードで実行できます。PySpark をローカル モードで実行する前に、次の構成を設定します。
PYSPARK_SUBMIT_ARGS環境変数を次のように設定します。os.environ['PYSPARK_SUBMIT_ARGS']= '--master local pyspark-shell'
YARN_CONF_DIR環境変数は次のようになります。os.environ['YARN_CONF_DIR'] = ''
- 手順
- 新しいノートブックを作成します。
-
を選択します。
- 接続するデータ ソースの選択 ダイアログが表示されます。既存の Hadoop データ ソースを選択し、[データ ソースの追加] をクリックします。

- ノートブックにちょっとしたコードが挿入されます。これにより、データ ソースとノートブック間の通信が容易になります。さらに多くのデータ ソースを読み込む場合は、手順 1 から手順 3 を繰り返します (Python 実行オペレーターへの入力の最大制限は 3 です)。このコードを実行するには、
shift+enterを押すか、[実行] をクリックします。これで、挿入されたコード内のコメントを参照して他のコマンドを実行できるようになります。
コマンドは、メソッドが正しく動作するために必要なパラメーターを備えたクラス
ChorusCommanderのインスタンス化されたオブジェクトであるオブジェクトccを使用します。生成されたコードは、cc.read_input_fileメソッド呼び出しで、sqlContext引数を初期化された Spark セッションに設定します。spark_options辞書引数を設定して、CSV 形式の追加オプションを Spark データ フレーム リーダーに渡すことができます。 -
データセットを読み取るには、そのデータセット用に生成されたコード内の行と、対応する
spark_optionsを持つ_props変数のコメントを解除します。 -
ノートブックを Python 実行オペレーターとして使用するには、
use_input_substitutionパラメーターを[False]から[True]に変更し、読み込むデータセットのexecution_labelパラメータを追加します。execution_labelの値は、後続のデータセットに対して、文字列'1'から始まり、その後に'2'、'3'が続く必要があります。詳細については、help(cc.read_input_file)を参照してください。 -
生成された
cc.read_input_fileメソッド呼び出しは、Spark データ フレームを返します。必要に応じて、データ フレームに対して変更、コピー、またはその他の操作を実行できます。 -
必要な出力 Spark データ フレームが作成されたら、
cc.write_output_fileを使用してターゲット テーブルに書き込みます。-
ダウンストリーム オペレーターでの出力の使用を有効にするには、
use_output_substitution=Trueを設定します。 -
ターゲットと同じパスにある既存のファイルを上書きするには、
overwrite_existsパラメーターを[True]に設定します。 -
spark_options辞書引数を設定して、CSV 形式の追加オプションを Spark Data Frame Writer に渡すことができます。
詳細については、
help(cc.write_output_file)を参照してください。ノート:-
これがワークフローのターミナル オペレーターではない場合は、
header=Trueを設定しないでください。これは、後続のオペレーターが出力ファイルのヘッダー行ではなくオペレーター メタデータを使用するためです。 -
ワークフロー内の他のオペレーターとの互換性を保つために、
write_output_fileの区切り文字引数としてカンマ(,) を使用することも、区切り文字引数を使用しないこともできます。
-
-
ノートブックをレガシー ワークフローで Python 実行 オペレーターとして使用できるように、ノートブックを手動で実行してメタデータを決定します。
サンプルコマンド
次のサンプル コマンドを使用してテーブルを書き込みます。
cc.write_output_table(ds1_adult_csv, table_name='adult_outemr2_hadoop.csv', schema_name='Compute_s3_local',
database_name='', sqlContext=spark,spark_options=ds1_props,
overwrite_exists=True,drop_if_exists=True, use_output_substitution=True)
次のサンプル コマンドを使用してファイルを書き込みます。
cc.datasource_name = 'EMR535_Large3'
cc.write_output_file(ds1_ Adult_csv, file_path='/tmp/Adult_out.csv',
sqlContext=spark, file_type='csv', spar_options={}, overwrite_exists=True)